package com.dragon.modules.yuegou.service.merchant;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dragon.common.web.PageRequest;
import com.dragon.modules.yuegou.entity.merchant.MerchantEntity;
import com.dragon.modules.yuegou.model.merchant.ArchitectureTree;
import com.dragon.modules.yuegou.model.merchant.GroupDistrictBtypeTree;
import com.dragon.modules.yuegou.model.merchant.Merchant;
import com.dragon.modules.yuegou.model.merchant.MerchantPayConfig;
import com.dragon.modules.yuegou.model.merchant.MerchantTree;
import com.dragon.modules.yuegou.model.merchant.PosterAppInfo;
import com.dragon.modules.yuegou.model.system.Application;
import com.dragon.modules.yuegou.model.system.Document;
import com.dragon.modules.yuegou.query.merchant.MerchantInfoQuery;
import com.dragon.modules.yuegou.query.merchant.MerchantQuery;
import com.dragon.modules.yuegou.query.merchant.QrcodeQuery;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 商户信息 服务接口
 *
 * @author pbuilder generated
 * @date 2019-07-30 09:57:34
 * @version 2.0
 */
public interface MerchantService extends IService<MerchantEntity> {

    /**
     * 获取集团商圈商户分页列表
     * */
    IPage<Merchant> search(PageRequest page, MerchantInfoQuery query);

    /**
     * 新增/修改商户
     * */
    String saveMerchant(Merchant merchant);

	/**
	 * 删除商户
	 */
	void delMerchant(String delBy, String id);

    /**
     * 开启/关闭商户二维码
     * */
    void merchantQRCode(QrcodeQuery qrcodeQuery);

    /**
     * 分配商户列表
     * */
    MerchantTree getMerchant(String busdId, String groupId);
    
    /**
     * 根据商圈和所有者类型查询商户列表
     * */
    List<Merchant>  getOwnerTypeMerchantList(String busdId,Integer... ownerType);


    /**
     * 悦卡可用商户列表
     * */
    MerchantTree getMerchantList(String busdId);

    /**
     * 根据业态id或商圈id查询商户
     * 可根据商户名称模糊查询
     * @param id
     * @param busdId
     * @return
     */
    List<Merchant> getMerchantById(String id, String busdId, String merchantName);

    /**
     * 根据集团id或商圈id或业态id查询商户
     * 可根据商户名称模糊查询
     * @param groupId
     * @param busdId
     * @param btypeId
     * @return
     */
    List<Merchant> getMerchantById(String groupId, String busdId, String btypeId, String merchantName);
    
    /**
     * 根据spuId查询可核销商户
     */
	List<Merchant> listBySpuId(String spuId);

    /**
     * 根据spuId查询可核销商户
     */
    IPage<Merchant> listBySpuId(IPage<MerchantEntity> page,String spuId);


	Merchant merchantDetail(String merchantId);

    /**
     * 大运营查询悦卡可用商户分页列表
     * */
    GroupDistrictBtypeTree getPlatformMerchantList();

    /**
     * 根据悦卡id查询可用商户
     * @param cardId
     * @return
     */
    List<Merchant> getMerchantByCardId(String cardId);

    /**
     * 根据旧商户id 查询商户
     * @param merchantInfoId
     * @return
     */
    Merchant getByOldId(String merchantInfoId);

    /**
     * 获取商户信息
     * */
	Merchant info(String merchantId,String member);

    /**
     * 查询特殊商户费率
     * @param page
     * @param busdId
     * @param merchantName
     * @return
     */
    IPage<Merchant> searchFeeRatio(PageRequest page, String busdId, String merchantName);

    /**
     * 特殊费率设置
     * @param id
     * @param selfFeeRatio
     * @param description
     */
    void setFee(String id, BigDecimal selfFeeRatio, String description);

    /**
     * 根据商圈Id查询商户信息
     * */
	IPage<Merchant> merchantList(PageRequest page, MerchantQuery query);


    /**
     * 获取商户结算比例
     * @param merchantId
     * @return
     */
    BigDecimal getFeeRatio(String merchantId);

    /**
     * 套餐查询可核销商户列表
     * */
	IPage<Merchant> tspuMerchantList(PageRequest page, String spuId);
	
	/**
	 * 根据商户ID查询商户详情
	 */
	Merchant getMerchantById(String id);


    /**
     * 获取集团会员销售数据商户分页列表
     * */
    IPage<Merchant> findMerchantInfoList(PageRequest page, MerchantInfoQuery query);

    /**
     * 查询员工版 销售数据列表
     * */
    IPage<Merchant> findMerchantList(PageRequest page, MerchantInfoQuery query);

    /**
     * 查询员工版 销售数据 为抄数据量
     * */
    Integer countMerchantList( MerchantInfoQuery query);
    
    /**
     * APP版 获取商户信息
     */
    Merchant getMerchantInfo(String merchantId, String userId);
    
    /**
     * 集团版后台 商户支付设置
     */
    void merchantPayConfig(MerchantPayConfig payConfig);
    
    /**
     * 查询推荐商户信息
     * */
	IPage<Merchant> recommendMerchantList(PageRequest pageInfo,String busdId);

	/**
	 * 生成悦店海报
	 * @param appid 
	 * */
	String yueDianposters(String merchantId, String appid, PosterAppInfo appinfo, String memberId);


	/**
	 * @param busdId 商圈Id
	 * @return
	 */
	ArchitectureTree architectureTree(String busdId);

    /**
     * 绑定微信
     * @param id
     * @param code
     * @return
     */
    Map<String, Object> bindWechat(String id, String code, Application application);

    /**
     * 导出商户
     * @param query
     * @return
     */
    Document exportMerchant(MerchantInfoQuery query);
}